let url = 'http://www.domain.com/?user=anonymous&id=123&id=456&city=%E5%8C%97%E4%BA%AC&enabled';

// 期望结果
// {
//     user: 'anonymous',
//     id: [123, 456], // 重复出现的key要组装成数组，能被转为数字
//     city: '北京',  // 中文需要解码
//     enabled: true,  // 未指定值的key约定为true
// }

function parseParam(url) {
    // const paramsStr = /.+\?(.+)$/.exec(url)[1]; // 取出？后面的字符串
    const paramsStr = url.slice(url.indexOf('?')+1);
    const paramsArr = paramsStr.split('&');  // 将字符串以&分割后存到数组中

    let paramsObj = {};
    // 将params存入对象
    paramsArr.forEach(item => {
        if (item.indexOf('=') !== -1) {
            let [key, value] = item.split('=');
            value = decodeURIComponent(value); // 解码
            value = /^\d+$/.test(value) ? parseFloat(value) : value;   // 判断是否需要转为数字
            if (paramsObj.hasOwnProperty(key)) {   // 如果对象中有key 则添加一个值
                paramsObj[key] = [].concat(paramsObj[key], value);
            } else {
                paramsObj[key] = value;
            }
        } else {
            paramsObj[item] = true;
        }
    });
    return paramsObj;
};

console.log(parseParam(url));   // { user: 'anonymous', id: [ 123, 456 ], city: '北京', enabled: true }
